package com.dynabook.ems.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dynabook.ems.model.bo.OldMachineMessageBO;
import com.dynabook.ems.model.bo.TableDataBO;
import com.dynabook.ems.model.dto.*;
import com.dynabook.ems.model.entity.EmsMainEngine;
import com.dynabook.ems.model.vo.MachineListVO;
import com.dynabook.ems.model.vo.ProductListVO;
import com.dynabook.ems.model.vo.ReceiptListVO;
import com.dynabook.ems.model.vo.SampleListVO;
import com.dynabook.ems.model.vo.detailMachine.DetailMachine;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * @author tester
 * @description 针对表【ems_main_engine】的数据库操作Mapper
 * @createDate 2025-06-05 14:58:22
 * @Entity generator.domain.EmsMainEngine
 */
public interface EmsMainEngineMapper extends BaseMapper<EmsMainEngine> {
    @Select("select GETFIXEDNO() as fixed")
    String getFixedNo();


    Page<ReceiptListVO> getReceiptListWithUser(
            Page<ReceiptListVO> page,
            @Param("searchText") String searchText,
            @Param("statusList") List<Integer> statusList,
            @Param("sortField") String sortField,
            @Param("sortOrder") String sortOrder,
            @Param("isRepeats") List<String> isRepeats
    );

    ReceiptUpdateDTO getSingleMachine(String fixNO);

    List<TableDataBO> getTableData(List<String> fixedNo);

    DetailMachine getDetailMachine(String fixedNo);

    
    Page<MachineListVO> pageMachineListWithHistoryUser(Page<MachineListVO> page, @Param("params") MachineListDTO machineListDTO);

    Page<MachineListVO> pageMachineListWithUserName(Page<MachineListVO> page, @Param("params") MachineListDTO machineListDTO);

    Page<MachineListVO> pageMachineList(Page<MachineListVO> page, @Param("params") MachineListDTO machineListDTO);

    Page<MachineListVO> pageMachineListWithSearch(Page<MachineListVO> page,   @Param("params") MachineListDTO machineListDTO);
    
    /**
     * 根据样品型号分页查询样品列表
     * @param page 分页参数
     * @param request 查询条件
     * @return 样品列表
     */
    Page<SampleListVO> pageSampleListByType(Page<SampleListVO> page, @Param("request") SampleListRequest request);
    
    /**
     * 根据工单号分页查询绑定的样品列表
     * @param page 分页参数
     * @param request 查询条件
     * @return 样品列表
     */
    Page<SampleListVO> pageSampleListByWorkOrder(Page<SampleListVO> page, @Param("request") WorkOrderSampleListRequest request);
    
    /**
     * 分页查询成品列表
     * @param page 分页参数
     * @param request 查询条件
     * @return 成品列表
     */
    Page<ProductListVO> pageProductList(Page<ProductListVO> page, @Param("request") ProductListRequest request);
    
    /**
     * 分页查询旧品入库列表
     * @param page 分页参数
     * @param request 查询条件
     * @return 旧品列表
     */
    Page<ProductListVO> pageOldProductList(Page<ProductListVO> page, @Param("request") ProductListRequest request);

    int deleteReceiptDataFromMainEngine(List<String> fixedNos);
    int deleteReceiptDataFromEbsData(List<String> fixedNos);
    
    /**
     * 根据样品编号列表查询样品详细信息（包括课室名称）
     * @param fixedNos 样品编号列表
     * @param type 样品型号
     * @return 样品详细信息列表
     */
    List<SampleListVO> getSelectedSamplesWithSectionManager(@Param("fixedNos") List<String> fixedNos, @Param("type") String type);

    OldMachineMessageBO getSameMessage(String modelType);
    
    /**
     * 查询平均单耗数据
     * @param startDateTime 开始时间
     * @param endDateTime 结束时间
     * @return 平均单耗数据列表
     */
    List<com.dynabook.ems.model.vo.AverageConsumptionExportVO> getAverageConsumptionData(
            @Param("startDateTime") java.time.LocalDateTime startDateTime, 
            @Param("endDateTime") java.time.LocalDateTime endDateTime);
}




